package com.swedne.test.protobuf;

import android.os.SystemPropertiesProto;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class CompressUtil {
    // 压缩
    public static String compress(String str) throws IOException {
        if (str == null || str.length() == 0) {
            return str;
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        GZIPOutputStream gzip = new GZIPOutputStream(out);
        gzip.write(str.getBytes());
        gzip.close();
        return out.toString("ISO-8859-1");
    }

    // 压缩
    public static byte[] compressByte(byte[] bytes) throws IOException {
        if (bytes == null || bytes.length == 0) {
            return bytes;
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        GZIPOutputStream gzip = new GZIPOutputStream(out);
        gzip.write(bytes);
        gzip.close();
        return out.toByteArray();
    }

    // 解压缩
    public static byte[] uncompressByte(byte[] bytes) throws IOException {
        if (bytes == null || bytes.length == 0) {
            return bytes;
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ByteArrayInputStream in = new ByteArrayInputStream(bytes);
        GZIPInputStream gunzip = new GZIPInputStream(in);
        byte[] buffer = new byte[256];
        int n;
        while ((n = gunzip.read(buffer)) >= 0) {
            out.write(buffer, 0, n);
        }
        // toString()使用平台默认编码，也可以显式的指定如toString(&quot;GBK&quot;)
        return out.toByteArray();
    }

    // 解压缩
    public static String uncompress(String str) throws IOException {
        if (str == null || str.length() == 0) {
            return str;
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ByteArrayInputStream in = new ByteArrayInputStream(str
                .getBytes("ISO-8859-1"));
        GZIPInputStream gunzip = new GZIPInputStream(in);
        byte[] buffer = new byte[256];
        int n;
        while ((n = gunzip.read(buffer)) >= 0) {
            out.write(buffer, 0, n);
        }
        // toString()使用平台默认编码，也可以显式的指定如toString(&quot;GBK&quot;)
        return out.toString();
    }

    public static void main(String[] args) throws IOException {
//        QrcodeOuterClass.Qrcode build = QrcodeOuterClass.Qrcode.newBuilder().setCode("我爱中国！我爱中国！我爱中国！我爱中国！我爱中国！我爱中国！我爱中国！iot:Oj8U5sSn51Qq6MNQ6z5uJ4cqyHHNWqSjk/+74ZYQrWTrtouyKxV5J8oGV+AEKYRfO6VcBhzhL3A=").build();
//        System.out.println("compress before="+build.getCode().getBytes().length);
//        System.out.println("compress before2="+build.getSerializedSize());
//        byte[] compress = compressByte(build.toByteArray());
//        System.out.println("compress after="+compress.length);
//        System.out.println("compress="+compress);
//        String uncompress = uncompress(compress);
//        System.out.println("uncompress="+uncompress);
    }
}
